#ifndef EVTDATA_H
#define EVTDATA_H

#include <vector>
#include <TString.h>
#include "particle.h"
#include <TTree.h>
#include <iostream>
#include <TChain.h>
#include "Electron.h"
#include "Jet.h"
#include "Muon.h"
/*
 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 * This is the  abstract base class for obtaining event data from different trees.
 Classes obtained by root via MakeClass/MakeSelector shall be inherited from this
 EvtData
 !!!!!!!!!!!!!!!!!!!
 */

class EvtData{

public:
  EvtData();//constructor shall never take any arguments !!!
  virtual ~EvtData();
  virtual void Init(TTree *)=0;//it s automatically overriden by makeclass so dont worry about this
  //TTree *fChain;//will automatically be overriden when you inherit
  virtual std::vector<Muon>* getMuons();
  virtual std::vector<Electron>* getElectrons();
  virtual std::vector<Jet>* getJets();
  virtual void FillEvtData(unsigned int)=0;//override this when you inherit 
  virtual double getMET();
  virtual int getNtrks();
  virtual void ClearEvtData();
  virtual void SwitchBranches()=0;// should be overriden. All Branches are closed by default !!! Know what branches to enable first
  virtual int getEvtNr();
  virtual int getlbNr();
  virtual int getRunNr();
  virtual void setEvtNr(int);
  virtual void setlbNr(int);
  virtual void setRunNr(int);
  
   protected:
   int EvtNr;
   int lbNr;
   int RunNr;
   
   std::vector<Jet>* jets;
   std::vector<Muon>* muons;
   std::vector<Electron>* electrons;
   double MET;
   int Ntrks;
   
};

/*****************************************/

#endif
